﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Entidades;

namespace DAO
{
    public static class InformeDAO
    {
        public static DataTable cargarComboUsuario()
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            DataTable dt = new DataTable();
            try
            {
                cn.Open();
                cmd.CommandText = "select userName from Usuario";
                SqlDataReader dr = cmd.ExecuteReader();
                dt.Load(dr);
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al cargar el combo Usuario:" + ex.Message);
            }
            finally
            {
                cn.Close();
            }
            return dt;

        }
        public static DataTable cargarGrillaByFiltroReserva(string usuario, int? cine, string fechaDesde,string fechaHasta, string orden)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            DataTable dt = new DataTable();
            try
            {
                cn.Open();
                string sql = "select distinct r.userName,r.id_Reserva,c.nombre,r.fecha from Reserva r,Entrada e,Cine c where r.id_Reserva=e.id_Reserva and e.id_Cine=c.id_Cine";

                if (!string.IsNullOrEmpty(usuario))
                {
                    sql += " and r.userName like @user";
                    cmd.Parameters.AddWithValue("@user", usuario + "%");
                }
                if (cine != null)
                {
                    sql += " and e.id_Cine=@cine";
                    cmd.Parameters.AddWithValue("@cine", cine);
                }
                if (!string.IsNullOrEmpty(fechaDesde) && !string.IsNullOrEmpty(fechaHasta))
                {
                    sql += " and r.fecha BETWEEN @fechaDesde and @fechaHasta";
                    cmd.Parameters.AddWithValue("@fechaDesde", fechaDesde);
                    cmd.Parameters.AddWithValue("@fechaHasta", fechaHasta);
                }
                cmd.CommandText = sql;
                if (orden == "")
                    cmd.CommandText += " order by r.userName";
                else
                {                   
                     cmd.CommandText += " order by " + orden;      

                }
                SqlDataReader dr = cmd.ExecuteReader();
                dt.Load(dr);
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al cargar grilla por filtros:" + ex.Message);
            }
            finally
            {
                cn.Close();
            }
            return dt;
        }
        public static DataTable cargarGrillaByFiltroPelicula(int? pelicula, int? cine, string fechaDesde, string fechaHasta, string orden)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            DataTable dt = new DataTable();
            try
            {
                cn.Open();
                string sql = "select p.nombre,c.nombre,f.fecha,sum(cp.capacidad -f.lugares_libres) as Espectadores " ; 
                sql += "from Funcion f, CinePorSala cp,Pelicula p, Cine c ";
                sql += "where f.id_Cine= cp.id_Cine and f.numero_Sala=cp.numero_Sala and f.id_Pelicula=p.id_Pelicula and f.id_Cine=c.id_Cine";
                if (pelicula !=null)
                {
                    sql += " and f.id_Pelicula=@pel";
                    cmd.Parameters.AddWithValue("@pel",pelicula);
                }
                if (cine != null)
                {
                    sql += " and f.id_Cine=@cine";
                    cmd.Parameters.AddWithValue("@cine", cine);
                }
                if (!string.IsNullOrEmpty(fechaDesde) && !string.IsNullOrEmpty(fechaHasta))
                {
                    sql += " and f.fecha BETWEEN @fechaDesde and @fechaHasta";
                    cmd.Parameters.AddWithValue("@fechaDesde", fechaDesde);
                    cmd.Parameters.AddWithValue("@fechaHasta", fechaHasta);
                }
                sql += " group by p.nombre,c.nombre,f.fecha,(cp.capacidad -f.lugares_libres)";
                sql += " having sum(cp.capacidad -f.lugares_libres) > 0";
                sql += " order by (cp.capacidad -f.lugares_libres) DESC";

                cmd.CommandText = sql;
                if (orden == "")
                    cmd.CommandText += ",p.nombre";
                else
                {
                    if (orden.Equals("nombre1"))
                    {
                        cmd.CommandText += ",c.nombre";
                    }
                    else
                    {
                        if (orden.Equals("nombre"))
                        {
                            cmd.CommandText += ",p.nombre";
                        }
                        else
                            cmd.CommandText += ","+orden;
                    }

                }
                SqlDataReader dr = cmd.ExecuteReader();
                dt.Load(dr);
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al cargar grilla por filtros:" + ex.Message);
            }
            finally
            {
                cn.Close();
            }
            return dt;
        }
    }
}
